package com.ruoyi.common.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ruoyi.common.config.serializer.SensitiveJsonSerializer;
import com.ruoyi.common.enums.DesensitizedType;

/**
 * 数据脱敏注解
 * <p>
 * 用于标记需要进行数据脱敏处理的字段，通过Jackson序列化机制实现敏感信息的自动脱敏。
 * 该注解只能应用于类的字段上，在运行时生效。
 * </p>
 *
 * @author ruoyi
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveJsonSerializer.class)
public @interface Sensitive {
    /**
     * 获取数据脱敏类型
     * <p>
     * 指定该字段需要采用的具体脱敏策略，如手机号、身份证号、邮箱等不同类型的脱敏方式
     * </p>
     *
     * @return 脱敏类型枚举值
     */
    DesensitizedType desensitizedType();
}

